package yunjiao.javatutorials.guava.concurrent;

import com.google.common.util.concurrent.SettableFuture;

import java.util.concurrent.ExecutionException;

/**
 * 手动设置成功结果
 *
 * @author yangyunjiao
 */
public class SettableFutureBasicDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 1. 创建 SettableFuture 实例（指定泛型为结果类型）
        SettableFuture<String> future = SettableFuture.create();

        // 2. 模拟异步线程（实际场景可能是 RPC 回调、事件通知等）
        new Thread(() -> {
            try {
                // 模拟业务处理（如调用接口、查询数据库）
                Thread.sleep(1000);
                String result = "业务处理成功的结果";

                // 3. 手动设置成功结果
                boolean success = future.set(result);
                System.out.println("设置结果是否成功？" + success); // 输出 true（首次设置）
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }).start();

        // 4. 主线程阻塞等待结果（也可使用 addListener 异步处理）
        String result = future.get();
        System.out.println("获取到结果：" + result); // 输出 "获取到结果：业务处理成功的结果"
    }
}
